From 322cda0e7865f90493ed0337182c2d9fe51a66b4 Mon Sep 17 00:00:00 2001 From: justbur Date: Thu, 9 Jun 2016 22:37:11 -0400 Subject: [PATCH] Introduce delayed prefixes One version of idea in #128. This design is subject to change. --- which-key.el | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/which-key.el b/which-key.el index abc9e36e679..0175d3367e1 100644 --- a/which-key.el +++ b/which-key.el @@ -341,6 +341,20 @@ See http://www.gnu.org/software/emacs/manual/html_node/emacs/Modifier-Keys.html" :group 'which-key :type 'boolean) +(defcustom which-key-delayed-prefixes nil + "A list of key sequences (in the form of vectors of events) +that should not pop up the which-key buffer after +`which-key-idle-delay' but after `which-key-idle-delay' + +`which-key-delayed-prefixes-delay'." + :group 'which-key + :type '(repeat (vector integer))) + +(defcustom which-key-delayed-prefixes-delay 1 + "When `which-key-delayed-prefixes' is non-nil delay which-key +popup by this many seconds after `which-key-idle-delay'." + :group 'which-key + :type 'integer) + ;; Hooks (defvar which-key-init-buffer-hook '() "Hook run when which-key buffer is initialized.") @@ -470,6 +484,7 @@ used.") (defvar which-key--inhibit-next-operator-popup nil) (defvar which-key--current-show-keymap-name nil) (defvar which-key--prior-show-keymap-args nil) +(defvar which-key--delayed-timer nil) (defvar which-key-key-based-description-replacement-alist '() "New version of @@ -884,6 +899,7 @@ total height." which-key--current-show-keymap-name nil which-key--prior-show-keymap-args nil which-key--on-last-page nil) + (cancel-timer which-key--delayed-timer) (when (and which-key-idle-secondary-delay which-key--secondary-timer-active) (which-key--start-timer)) @@ -2057,9 +2073,10 @@ Finally, show the buffer." (which-key--create-pages formatted-keys)) (which-key--show-page 0))))) -(defun which-key--update () +(defun which-key--update (&optional delayed) "Function run by timer to possibly trigger `which-key--create-buffer-and-show'." - (let ((prefix-keys (this-single-command-keys))) + (let ((prefix-keys (this-single-command-keys)) + skip) ;; (when (> (length prefix-keys) 0) ;; (message "key: %s" (key-description prefix-keys))) ;; (when (> (length prefix-keys) 0) @@ -2086,6 +2103,15 @@ Finally, show the buffer." (eq this-command 'god-mode-self-insert)) (setq prefix-keys (when which-key--god-mode-key-string (kbd which-key--god-mode-key-string)))) + (when (and which-key-delayed-prefixes + which-key-delayed-prefixes-delay + (> (length prefix-keys) 0) + (not delayed) + (member prefix-keys which-key-delayed-prefixes)) + (setq which-key--delayed-timer + (run-with-idle-timer which-key-delayed-prefixes-delay nil + #'which-key--update t)) + (setq skip t)) (cond ((and (> (length prefix-keys) 0) (or (keymapp (key-binding prefix-keys)) ;; Some keymaps are stored here like iso-transl-ctl-x-8-map @@ -2095,6 +2121,7 @@ Finally, show the buffer." (keymapp (which-key--safe-lookup-key function-key-map prefix-keys))) (not which-key-inhibit) + (not skip) ;; Do not display the popup if a command is currently being ;; executed (or (and which-key-allow-evil-operators -- 2.30.2